import {AActor} from "@/libs/AActor";
import {Spacial} from "@/common/Spacial/index";
import {onMounted, onUnmounted, ref} from "vue";
// cesium Token
const cesiumToken = import.meta.env.VITE_APP_CESIUM_TOKEN
// 天地图的 key
const cesiumMapKEY = import.meta.env.VITE_APP_MAP_KEY
const cesiumMapURL = import.meta.env.VITE_APP_MAP_URL

// 装载地图
class Atlas extends AActor {
    public constructor(parent: Spacial) {
        super();
        this.parent = parent
    }

    private parent!: Spacial
    private dom = ref<HTMLElement | null>(null)
    private viewer: Cesium.Viewer | null = null;

    public InitStates(): Record<any, any> {
        return {
            dom: this.dom
        };
    }

    public InitHooks() {
    }

    public Run() {
        onMounted(() => {
            this.InitCesiumToken()
            this.InitViewer()
        })
        onUnmounted(() => {
            this.Destroy()
        })
    }

    private InitCesiumToken() {
        Cesium.Ion.defaultAccessToken = cesiumToken
    }

    // 初始化渲染dom
    private InitViewer() {
        if (this.dom.value) {
            this.viewer = new Cesium.Viewer(this.dom.value, {
                useDefaultRenderLoop: true,//是否让Cesium 自己刷新
                animation: false, // 动画小组件
                baseLayerPicker: false, // 底图组件，选择三维数字地球的底图（imagery and terrain）。
                fullscreenButton: false, // 全屏组件
                vrButton: false, // VR模式
                geocoder: false, // 地理编码（搜索）组件
                homeButton: false, // 首页，点击之后将视图跳转到默认视角
                infoBox: false, // 信息框
                sceneModePicker: false, // 场景模式，切换2D、3D 和 Columbus View (CV) 模式。
                selectionIndicator: false, // 是否显示选取指示器组件
                timeline: false, // 时间轴
                navigationHelpButton: false, // 帮助提示，如何操作数字地球。
                requestRenderMode: true, // 启用请求渲染模式
                scene3DOnly: false, // 每个几何实例将只能以3D渲染以节省GPU内存
                sceneMode: 3, // 初始场景模式 1 2D模式 2 2D循环模式 3 3D模式  Cesium.SceneMode
                fullscreenElement: document.body, // 全屏时渲染的HTML元素 暂时没发现用处
                // 如果最初应该看到导航说明，则为true；如果直到用户明确单击该按钮，则该提示不显示，否则则该提示不显示为false。
                navigationInstructionsInitiallyVisible: false,
                contextOptions: {
                    webgl: {
                        alpha: false,
                        antialias: true,
                        preserveDrawingBuffer: true,
                        failIfMajorPerformanceCaveat: false,
                        depth: true,
                        stencil: false,
                        anialias: false
                    }
                },
                shadows: false,
                showRenderLoopErrors: true,
                orderIndependentTranslucency: true,
                // 地图提供者
                // imageryProvider:cesiumMap
                imageryProvider: new Cesium.WebMapTileServiceImageryProvider({
                    url: 'http://{s}.tianditu.com/img_w/wmts?service=wmts&request=GetTile&version=1.0.0&LAYER=img&tileMatrixSet=w&TileMatrix={TileMatrix}&TileRow={TileRow}&TileCol={TileCol}&style=default&format=tiles&tk=e8b55ab19cb6624934fd2208e7c9b31d',
                    // url: `${cesiumMapURL}${cesiumMapKEY}`,
                    subdomains: ["t0", "t1","t2", "t3", "t4", "t5", "t6", "t7"],
                    layer: 'tdtCiaLayer',
                    style: 'default',
                    format: 'image/jpeg',
                    tileMatrixSetID: 'GoogleMapsCompatible', //使用谷歌的瓦片切片方式
                })
            })
            this.viewer.scene.debugShowFramesPerSecond = false
            this.viewer.scene.postProcessStages.fxaa.enabled = false
            this.viewer.scene.globe.depthTestAgainstTerrain = false
            this.viewer.scene.primitives.add(Cesium.createOsmBuildings())

        }
    }

    protected Destroy() {

    }
}

export {Atlas}